package reflect中Class对象的创建;

/**
 * @Auther:云尚学Java
 * 1.3.1第一种方式
 * Class.forName("全类名");
 * 将字节码文件加载进内存，返回Class对象
 * 多用于配置文件，将类名定义在配置文件中。读取文件、加载类
 */
public class ReflectDemo {

    public static void main(String[] args) throws ClassNotFoundException {
        //1. Class.forName("全类名")：将字节码文件加载进内存，返回Class对象
        Class class1 = Class.forName("reflect中Class对象的创建.Person");
        System.out.println("1："+class1);

        //2.类名.class:通过类名的属性class获取
        Class class2=Person.class;
        System.out.println("2："+class2);

        //3.对象.getClass(),getClass()方法在Object类中定义着。
        Person person=new Person();
        Class class3 = person.getClass();
        System.out.println("3："+class3);
        /**
         *  同一个字节码文件(*.class)在一次程序运行过程中，
         *  只会被加载一次，不论通过哪一种方式获取的Class对象都是同一个。
         *
         *  地址判断的方式验证一下   ==
         */
        System.out.println(class1==class2);
        System.out.println(class1==class3);

        //获取Student类的Class对象
        Class class4 = Student.class;
        System.out.println(class1==class4);

    }
}
